package com.study.guava;


import com.google.common.base.*;
import com.google.common.io.CharStreams;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

/**
 * @author: jzhou
 * @date: 2024/11/30-21:48
 * @version: 1.0
 * @description: juc-study
 */
public class GuavaBaseDemo {

    public static void main(String[] args) throws IOException {
        // 1.使用Joiner拼接字符串
        String joinedString = Joiner.on(", ").join("apple", "banana", "cherry");
        System.out.println(joinedString);
        // 输出: apple, banana, cherry

        // 2.使用Splitter拆分字符串
        Iterable<String> splitStrings = Splitter.on(",").trimResults().split(joinedString);
        for (String s : splitStrings) {
            System.out.println(s);
            // 输出: apple, banana, cherry（每行一个）
        }

        // 3.使用Strings处理字符串
        String emptyString = "";
        String whitespaceString = "   ";
        System.out.println("nullToEmpty: " + Strings.nullToEmpty(null)); // 输出: （空字符串）
        System.out.println("isNullOrEmpty: " + Strings.isNullOrEmpty(emptyString)); // 输出: true
        System.out.println("isNullOrEmpty: " + Strings.isNullOrEmpty(whitespaceString)); // 输出: false
        System.out.println("CharMatcher: " + CharMatcher.whitespace().removeFrom(whitespaceString));
        // 输出: （空字符串）

        // 4.使用Charsets指定字符集
        Charset utf8 = Charsets.UTF_8;
        try (InputStream inputStream = GuavaBaseDemo.class.getResourceAsStream("/text.txt");
             InputStreamReader reader = new InputStreamReader(inputStream, utf8)) {

            String content = CharStreams.toString(reader);
            System.out.println(content);
            // 输出: test.txt文件的内容（假设文件存在且为UTF-8编码）
        }catch (IOException e){
            e.printStackTrace();
            // 处理异常
        }

        // 5.原始字符串，采用驼峰式命名
        String camelCaseString = "ExampleClassName";

        // 转换为下划线式命名
        String lowerUnderscoreString = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, camelCaseString);

        // 打印转换后的字符串
        System.out.println(lowerUnderscoreString); // 输出：example_class_name

        // 如果要将下划线式命名转回驼峰式命名，可以这样做：
        String backToCamelCaseString = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, lowerUnderscoreString);

        // 打印转回驼峰式命名后的字符串
        System.out.println(backToCamelCaseString);
        // 输出：ExampleClassName

        // 6. 使用CharMatcher
        String input = "Hello, World! This is a test string.";

        // 使用CharMatcher移除指定字符
        String resultWithoutVowels = CharMatcher.is('a').removeFrom(input);
        // 打印结果: "Hello, World! This is  test string."
        System.out.println(resultWithoutVowels);

        // 使用CharMatcher替换指定字符
        String resultReplaceVowels = CharMatcher.is('e').replaceFrom(input, '*');
        // 打印结果: "H*llo, World! This is a t*st string."
        System.out.println(resultReplaceVowels);

        // 使用CharMatcher保留指定字符
        String resultKeepVowels = CharMatcher.is( 'i').retainFrom(input);
        // 打印结果: "iii"
        System.out.println(resultKeepVowels);

    }
}
